package com.mauroleon.promotail.web.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.ModelAndView;

import com.mauroleon.promotail.domain.Local;
import com.mauroleon.promotail.domain.Usuario;



@Controller
public class UsuarioController {
	public HttpSession sesssion = null;
	public List<String> listaCriterio = new ArrayList<String> ();
	public List<Usuario> listaUsuario = new ArrayList<Usuario> ();
	public List<Local> listaLocal = new ArrayList<Local> ();
	
	
	public String URL_Cliente = "http://23.23.154.55:8710/promotail-platform/resources/clientes";
	
	
	private RestTemplate restTemplate;
	
	public UsuarioController() {
		// TODO Auto-generated constructor stub
	}
	
	@RequestMapping("/main/login.htm")
	public ModelAndView initial(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return new ModelAndView("login/login");
	}
	
	@RequestMapping("/loginUsuario.htm")
	public ModelAndView mostrarMenu(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String view = "main/home";

		String cuentaUsuario = request.getParameter("inputCuenta");
		String claveUsuario = request.getParameter("inputClave");
		String usuarioAdmin = null;
		//Autenticar usuario 
		Usuario actualUsuario = new Usuario();
		
		if(actualUsuario!=null){
			actualUsuario.setCuentaUsuario(cuentaUsuario);
			actualUsuario.setClaveUsuario("admin");
			usuarioAdmin = actualUsuario.getClaveUsuario();			
			if (usuarioAdmin.equals("admin")) {
				actualUsuario.setEstadoUsuario(5);
			}
			view = "main/mainMenu";
		}else{
			view = "login/login";
		}
		
		view = "main/mainMenu";
		sesssion = request.getSession();
		sesssion.setAttribute("nombreUsuario", "Mauro Leon Payano - " + cuentaUsuario);
		sesssion.setAttribute("tipoUsuario", actualUsuario.getEstadoUsuario());
		
		System.out.println("Ingreso usuario : " + cuentaUsuario);

		// usuarioService.save(inputNombres, inputApellidos, inputContrasena,
		// inputCorreo, optionsCategory);
		return new ModelAndView(view);
	}
	
	@RequestMapping("/menuPrincipal.htm")
	public ModelAndView initialMenu(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return new ModelAndView("main/menuPrincipal");
	}
	
	@RequestMapping("/cabeceraMenu.htm")
	public ModelAndView initialCabeceraMenu(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return new ModelAndView("main/cabeceraMenu");
	}
	
	@RequestMapping("/adminUsuario/mostrarRegistroUsuario.htm")
	public ModelAndView mostrarRegistrarUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		sesssion = request.getSession();
		sesssion.setAttribute("listaLocal", listaLocal);
		return new ModelAndView("usuario/registrarNuevoUsuario");
	}
	
	@RequestMapping("/adminUsuario/registrarUsuario.htm")
	public ModelAndView registrarUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String view = "/main/mainMenu";
		int rpta=0;
		
		Usuario usuario = new Usuario();
		
		String idCliente = request.getParameter("txtCliente")!=null ?request.getParameter("txtCliente") :"";
		String nombres = request.getParameter("inputNombres")!= null ? request.getParameter("inputNombres"):"";
		String apePaterno = request.getParameter("inputApePaterno")!=null ? request.getParameter("inputApePaterno"):"";
		String apeMaterno = request.getParameter("inputApeMaterno")!=null ? request.getParameter("inputApeMaterno") :"";
		String dni = request.getParameter("inputDni")!=null ?request.getParameter("inputDni") :"";
		String cuenta = request.getParameter("inputCuenta")!= null ? request.getParameter("inputCuenta"):"";
		String clave = request.getParameter("inputClave")!= null ? request.getParameter("inputClave"):"";
		String correo = request.getParameter("inputCorreo")!= null ? request.getParameter("inputCorreo"):"";
		
		Date fecha = new Date();
				
		usuario.setIdUsuario(3);
		usuario.setNombreUsuario(nombres);
		usuario.setApellidoMaterno(apeMaterno);
		usuario.setApellidoPaterno(apePaterno);
		usuario.setDniUsuario(dni);
		usuario.setCuentaUsuario(cuenta);
		usuario.setClaveUsuario(clave);
		usuario.setEmailUsuario(correo);
		usuario.setFechaModificacion(fecha);
		usuario.setFechaRegistro(fecha);
		usuario.setFechaVencimiento(fecha);
		
		
		//cliente.setLocals(new ArrayList<Local>());
		String url = URL_Cliente;
		//listaUsuario.add(usuario);
		restTemplate = new RestTemplate();
		//rpta = restTemplate.postForObject(url, cliente,Cliente.class);
		
		if (rpta==1){
			request.setAttribute("mensaje", "Se registro el usuario Satisfactoriamente");
		}else{
			request.setAttribute("mensaje", "El usuario ya existe");
		}		
		
		sesssion.setAttribute("listaUsuario",listaUsuario);		
		request.setAttribute("mensajeFlag", true);
		
		return new ModelAndView("usuario/registrarNuevoUsuario");
	}
	
	@RequestMapping("/adminUsuario/mostrarConsultaUsuario.htm")
	public ModelAndView mostrarConsultaUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String resp = null;
		sesssion = request.getSession();
		//listaUsuario.clear();
		
		listaUsuario = (List<Usuario>) sesssion.getAttribute("listaUsuario");
		//listaCliente = clienteResourceComponent.obtenerClientes();
		
		sesssion.setAttribute("listaUsuario",listaUsuario);
		sesssion.setAttribute("listaCriterio",cargarListaCriterio());
		return new ModelAndView("usuario/consultarUsuario");
	}
	
	@RequestMapping("/adminUsuario/consultarUsuario.htm")
	public ModelAndView consultarClientePorNombre(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		return new ModelAndView("usuario/consultarUsuario");
	}
	
	@RequestMapping("/adminUsuario/modificarUsuario.htm")
	public ModelAndView consultarUsuarioModificar(HttpServletRequest request,	
		HttpServletResponse response) throws Exception {
		
		sesssion = request.getSession();
		
		listaUsuario = (List<Usuario>) sesssion.getAttribute("listaUsuario");
		
		String codigoUsuario = request.getParameter("codigo")!= null ? request.getParameter("codigo") :"";
		
		for (Usuario r : listaUsuario) {
			if (r.getIdUsuario() == Integer.parseInt(codigoUsuario) ){
				request.setAttribute("usuario", r);
				break;
			}
		}

		//lista de local
		
		sesssion.removeAttribute("listaLocal");		
		sesssion.setAttribute("listaLocal", listaLocal);	
		return new ModelAndView("usuario/editarUsuario");
	}
	
	@RequestMapping("/adminUsuario/regresar.htm")
	public ModelAndView regresar(HttpServletRequest request,		
		HttpServletResponse response) throws Exception {
		/*
		sesssion = request.getSession();
		
		Usuario usuario = new Usuario();
		
		usuario = (Usuario) sesssion.getAttribute("usuario");
				
		listarRestaurant.add(restaurantServiceComponent.autenticarRestaurant(usuario.getCorreo(),usuario.getPwd()));
	*/
		return new ModelAndView("usuario/consultarUsuario");
	}
	
	@RequestMapping("/adminUsuario/update.htm")
	public ModelAndView update(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		//Integer rpta = 0;
		Integer rpta = 1;
		
		String page = "usuario/consultaUsuario";
		
		sesssion = request.getSession();
		
		Usuario usuario = new Usuario();
		
		usuario = (Usuario) sesssion.getAttribute("usuario");
				
		String idCliente = request.getParameter("txtCliente")!=null ?request.getParameter("txtCliente") :"";
		String nombres = request.getParameter("inputNombres")!= null ? request.getParameter("inputNombres"):"";
		String apePaterno = request.getParameter("inputApePaterno")!=null ? request.getParameter("inputApePaterno"):"";
		String apeMaterno = request.getParameter("inputApeMaterno")!=null ? request.getParameter("inputApeMaterno") :"";
		String dni = request.getParameter("inputDni")!=null ?request.getParameter("inputDni") :"";
		String cuenta = request.getParameter("inputCuenta")!= null ? request.getParameter("inputCuenta"):"";
		String clave = request.getParameter("inputClave")!= null ? request.getParameter("inputClave"):"";
		String correo = request.getParameter("inputCorreo")!= null ? request.getParameter("inputCorreo"):"";
		
		Date fecha = new Date();
		
		usuario.setIdUsuario(3);
		usuario.setNombreUsuario(nombres);
		usuario.setApellidoMaterno(apeMaterno);
		usuario.setApellidoPaterno(apePaterno);
		usuario.setDniUsuario(dni);
		usuario.setCuentaUsuario(cuenta);
		usuario.setClaveUsuario(clave);
		usuario.setEmailUsuario(correo);
		usuario.setFechaModificacion(fecha);
		usuario.setFechaRegistro(fecha);
		usuario.setFechaVencimiento(fecha);
		//rpta = clienteResourceComponent.actualizarCliente(cliente);
		
		if (rpta==1){
			
			listaUsuario = new ArrayList<Usuario>();
			
			//listaCliente = clienteResourceComponent.obtenerClientes();
			
			sesssion.removeAttribute("listaUsuario");			
			sesssion.setAttribute("listaUsuario", listaUsuario);
						
		}else{
			
			request.setAttribute("mensajeFlag", true);
			request.setAttribute("mensaje", "Error no se ha realizado las actualizaciones!!!!");
			
		}
		
		return new ModelAndView(page);
	}
	
	public List<String> cargarListaCriterio(){
		listaCriterio.clear();
		listaCriterio.add("Por nombre");
		listaCriterio.add("Por apellido paterno");
		listaCriterio.add("Por apellido materno");
		listaCriterio.add("Por DNI");
		return listaCriterio;
	}
}
